package com.yunxi.module.system.service.sms.impl;

import com.yunxi.module.system.enums.sms.SmsSendStatusEnum;
import com.yunxi.module.system.mapper.sms.SmsLogMapper;
import com.yunxi.module.system.model.sms.SmsLogDO;
import com.yunxi.module.system.service.sms.SmsLogService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.time.LocalDateTime;

/**
 * <p>
 * 短信日志 Service 接口实现类
 * </p>
 *
 * @author lidy
 * @since 2024-05-08
 */
@Service
@Slf4j
public class SmsLogServiceImpl implements SmsLogService {

    @Resource
    private SmsLogMapper smsLogMapper;

    /**
     * 更新日志的发送结果
     *
     * @param logId        日志编号
     * @param success      发送是否成功
     * @param apiSendCode  短信 API 发送结果的编码
     * @param apiSendMsg   短信 API 发送结果的提示
     * @param apiRequestId 短信 API 发送返回的唯一请求 ID
     * @param serialNo     短信 API 发送返回的序号
     */
    @Override
    public void updateSmsSendResult(Long logId, Boolean success, String apiSendCode,
                                    String apiSendMsg, String apiRequestId, String serialNo) {
        // 短信发送状态枚举
        SmsSendStatusEnum sendStatusEnum = success ? SmsSendStatusEnum.SUCCESS : SmsSendStatusEnum.FAILURE;
        smsLogMapper.updateById(SmsLogDO.builder().id(logId).sendStatus(sendStatusEnum.getStatus())
                .sendTime(LocalDateTime.now()).apiSendCode(apiSendCode).apiSendMsg(apiSendMsg)
                .apiRequestId(apiRequestId).apiSerialNo(serialNo).build());
    }
}
